package com.yt.sys.service;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yt.common.utils.Md5Utils;
import com.yt.sys.common.config.YmlConfig;
import com.yt.sys.mapper.LoginInfoMapper;
import com.yt.sys.models.bo.LoginInfoSaveBO;
import com.yt.sys.models.dto.LoginInfoDTO;
import com.yt.sys.models.dto.SysUserDTO;
import com.yt.sys.models.service.ILoginInfoService;
import com.yt.sys.models.vo.LoginInfoVO;
import com.yt.sys.models.vo.SysUserVO;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.BeanUtils;

import javax.annotation.Resource;

/**
 * 用户登录信息控制器
 *
 * @author zhou
 * @Date 2025-09-03 15:54:44
 */
@DubboService
public class LoginInfoServiceImpl extends ServiceImpl<LoginInfoMapper, LoginInfoDTO> implements ILoginInfoService {

    @Resource
    private YmlConfig ymlConfig;
    @Resource
    private SysUserServiceImpl sysUserService;

    @Override
    public boolean add(LoginInfoSaveBO saveBO) {
        LoginInfoDTO dto = new LoginInfoDTO();
        BeanUtils.copyProperties(saveBO, dto);
        Long id = ymlConfig.getPkId();
        dto.setId(id);
        return this.insert(dto);
    }

    @Override
    public LoginInfoVO getLogin(LoginInfoSaveBO saveBO) {
        Wrapper wrapper = new EntityWrapper();
        wrapper.eq("account", saveBO.getAccount());
        //获取一条账号所有登录信息
        LoginInfoDTO dto = this.selectOne(wrapper);
        if (dto == null) {
            return null;
        }
        LoginInfoVO vo = new LoginInfoVO();
        BeanUtils.copyProperties(dto, vo);
        return vo;
    }

    @Override
    public SysUserVO getSysLogin(LoginInfoSaveBO saveBO) {
        LoginInfoVO vo = getLogin(saveBO);
        if (vo == null) {
            return null;
        }
        SysUserVO sysUserVO = new SysUserVO();
        //根据登录信息的user_id去查询用户信息表中id为user_id的信息
        SysUserDTO dto = sysUserService.selectById(vo.getUserId());
        //判断输入的密码是不是等于登录表中密码，因为是加密过的，要不解密与输入密码比较，要么加密输入密码比较
        if (vo.getPassword().equals(Md5Utils.MD5Encode(saveBO.getPassword(), vo.getSalt()))) {
            BeanUtils.copyProperties(dto, sysUserVO);
            return sysUserVO;
        }
        return null;
    }
}
